/*
Pablo Sosa, 12546
* Yoly Moreno, 12519
* Fecha 30 de septiembre de 2013
 * Descripcion del programa: Heap construye el arbol de Huffman
*/

public class Heap<E>  {
    //atributos
    private int caract;
   
    private int num;

    //lista que contiene los elementos dle nodo
     private Nodo[] elementos;
    
   //constructor
    public Heap(int c) {
        //inicializacion de variables
        this.caract = c;
        elementos =  new Nodo[c];
        num = 0;
    }
//devuelve la raiz del arbol
 
    public Nodo head() {
        return elementos[num-1];
    }
   
    
   //el num que tiene asignado cada caracter es devuelto a traves de este metodo
    public int getCaracteres(){
        return caract;
    }
    
    
    
     
    //toma el codigo asignado y lo devuelve a cada caracter
    public int getNumero() {
        return num;
    }
    
   //agrega valores al arbol
    public void agregar(Nodo item) {
        int j;

        if(num == 0)
            elementos[num++] = item;
        else {
            for(j=num -1; j>=0; j--) {
                if(item.getFrec() >= elementos[j].getFrec())
                    elementos[j+1] = elementos[j];
                else
                    break;

            }

            elementos[j+1] = item;
            num ++;
        }


    }

    
    //quita el elemento qeu esta en heap
    public Nodo quitar() {
        num=num-1;
        return elementos[num];
    }
    
   //si se quiere quitar un valor especifico de heap se llama a este metodo
    public Nodo quitar(Nodo nodo) {
        Nodo estado;
        
        //recorriendo la lista
        for(int i =0; i < num; i++) {
            if(elementos[i].getCaracter().toString().charAt(0) == nodo.getCaracter().toString().charAt(0)) {
                estado = elementos[i];
                elementos[i] = null;//verifacion de errores
                for(int j = i+1; j < num; j++)
                    elementos[i] = elementos[j];
                num=num-1;
                return estado;
            }}return null;
    }
  
}